/*
 * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: CC0-1.0
 */

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"
#include "led.h"
#include "rgb_ws2812b.h"
#include "ledc_example.h"
// #include "rotation/EC11/ec11_drv.h"
#include "rotat_ec11_drv.h"
#include "my_key_driver.h"
#include "my_adc_drv.h"
#include "my_ntc_drv.h"
#include "my_seg_screen_drv.h"

// int rotation_num;

led_pwm_msg_t led_msg_test;
disp_data_t disp_data;

void app_main(void)
{
    printf("Hello world!\n");

    /* Print chip information */
    esp_chip_info_t chip_info;
    uint32_t flash_size;
    esp_chip_info(&chip_info);
    printf("This is %s chip with %d CPU core(s), %s%s%s%s, ",
           CONFIG_IDF_TARGET,
           chip_info.cores,
           (chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
           (chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
           (chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
           (chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");

    unsigned major_rev = chip_info.revision / 100;
    unsigned minor_rev = chip_info.revision % 100;
    printf("silicon revision v%d.%d, ", major_rev, minor_rev);
    if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
        printf("Get flash size failed");
        return;
    }

    printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
           (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());
    // led_init();
    // led_on();
    // rgb_ws2812_init();
    // pwm_test_init();
    // rotation_ec11_init();
    // button_driver_init();
    // my_adc_init();
    // my_ntc_init();
    my_seg_screen_init();

 

    for (int i = 5000; i >= 0; i--) {

        // if(i%10 == 0){
            printf("[zsf 001] rgb  in %d seconds...\n", i);
        // }
        
        led_msg_test.index ++;
        led_msg_test.index = led_msg_test.index%2;

        led_msg_test.freq += 1000;
        led_msg_test.freq = led_msg_test.freq%10000;
        if(led_msg_test.freq < 20000){
            led_msg_test.freq = 20000;
        }
        
        led_msg_test.duty += 10;
        led_msg_test.duty %= 100;
        // xQueueSend(led_pwm_queue, (void*)&led_msg_test,(TickType_t)0 );
        disp_data.display_data ++;
        disp_data.display_data = disp_data.display_data%181;
        disp_data.linging_icon_flag = disp_data.display_data%2;

        

        vTaskDelay(1000 / portTICK_PERIOD_MS);
        xQueueSend(g_display_queue, (void*)&disp_data, (TickType_t)0);
        // disp_test();
        // single_read();
        // my_adc_continue_read();
        // pwm_test_breath();
        if(rotation_num != 0){
            if(rotation_num == 1){
                printf("[zsf EC1X_1 ++] \n");
            }
            else if(rotation_num == -1){
                printf("[zsf EC1X_1 --] \n");
            }
            else if(rotation_num == 2){
                printf("[zsf EC1X_2 ++] \n");
            }
            else if(rotation_num == -2){
                printf("[zsf EC1X_2 --] \n");
            }


            rotation_num = 0;
        }

    }
    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}
